home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Online / RFCs / rfc / rfc0789.txt < prev    next >
Text File  |  1994-01-21  |  27KB  |  900 lines

  1.  
  2.                                                           RFC 789
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.     Vulnerabilities of Network Control Protocols: An Example
  21.  
  22.  
  23.  
  24.                           Eric C. Rosen
  25.  
  26.  
  27.                   Bolt Beranek and Newman Inc.
  28.  
  29.  
  30. RFC 789                              Bolt Beranek and Newman Inc.
  31.                                                     Eric C. Rosen
  32.  
  33.      This paper has appeared in the January 1981 edition  of  the
  34.  
  35. SIGSOFT  Software  Engineering Notes, and will soon appear in the
  36.  
  37. SIGCOMM Computer Communications Review.  It is  being  circulated
  38.  
  39. as  an  RFC because it is thought that it may be of interest to a
  40.  
  41. wider audience, particularly to the internet community.  It is  a
  42.  
  43. case  study  of  a  particular  kind of problem that can arise in
  44.  
  45. large distributed systems,  and  of  the  approach  used  in  the
  46.  
  47. ARPANET to deal with one such problem.
  48.  
  49.  
  50.      On  October 27, 1980, there was an unusual occurrence on the
  51.  
  52. ARPANET.  For a period of several hours, the network appeared  to
  53.  
  54. be  unusable,  due to what was later diagnosed as a high priority
  55.  
  56. software  process   running   out   of   control.    Network-wide
  57.  
  58. disturbances  are  extremely  unusual  in  the  ARPANET (none has
  59.  
  60. occurred in several years), and as a  result,  many  people  have
  61.  
  62. expressed  interest  in  learning more about the etiology of this
  63.  
  64. particular incident.  The purpose of this note is to explain what
  65.  
  66. the symptoms of the problem  were,  what  the  underlying  causes
  67.  
  68. were,  and  what  lessons  can  be  drawn.   As we shall see, the
  69.  
  70. immediate cause of the problem was  a  rather  freakish  hardware
  71.  
  72. malfunction  (which is not likely to recur) which caused a faulty
  73.  
  74. sequence of network control packets to be generated.  This faulty
  75.  
  76. sequence of control packets in turn affected the apportionment of
  77.  
  78. software resources in the IMPs, causing one of the IMP  processes
  79.  
  80. to  use  an  excessive  amount  of resources, to the detriment of
  81.  
  82. other  IMP  processes.   Restoring  the  network  to  operational
  83.  
  84.  
  85.                               - 1 -
  86.  
  87.  
  88. RFC 789                              Bolt Beranek and Newman Inc.
  89.                                                     Eric C. Rosen
  90.  
  91. condition  was  a  relatively straightforward task.  There was no
  92.  
  93. damage other than the outage itself,  and  no  residual  problems
  94.  
  95. once  the  network  was  restored.   Nevertheless,  it  is  quite
  96.  
  97. interesting to see the way  in  which  unusual  (indeed,  unique)
  98.  
  99. circumstances  can  bring  out vulnerabilities in network control
  100.  
  101. protocols, and that shall be the focus of this paper.
  102.  
  103.  
  104.      The problem began suddenly when  we  discovered  that,  with
  105.  
  106. very few exceptions, no IMP was able to communicate reliably with
  107.  
  108. any other IMP.  Attempts to go from a TIP to a host on some other
  109.  
  110. IMP   only   brought  forth  the  "net  trouble"  error  message,
  111.  
  112. indicating that no physical path  existed  between  the  pair  of
  113.  
  114. IMPs.   Connections  which already existed were summarily broken.
  115.  
  116. A flood of phone calls to the Network Control Center  (NCC)  from
  117.  
  118. all  around  the  country  indicated  that  the  problem  was not
  119.  
  120. localized, but rather seemed to be affecting virtually every IMP.
  121.  
  122.  
  123.      As a first step towards trying to find out what the state of
  124.  
  125. the network actually was, we dialed up a number  of  TIPs  around
  126.  
  127. the  country.  What we generally found was that the TIPs were up,
  128.  
  129. but  that  their  lines  were  down.   That  is,  the  TIPs  were
  130.  
  131. communicating  properly  with the user over the dial-up line, but
  132.  
  133. no connections to other IMPs were possible.
  134.  
  135.  
  136.      We tried manually restarting a number of IMPs which  are  in
  137.  
  138. our own building (after taking dumps, of course).  This procedure
  139.  
  140. initializes  all  of  the IMPs' dynamic data structures, and will
  141.  
  142.  
  143.                               - 2 -
  144.  
  145.  
  146. RFC 789                              Bolt Beranek and Newman Inc.
  147.                                                     Eric C. Rosen
  148.  
  149. often clear up problems which arise when, as sometimes happens in
  150.  
  151. most complex software systems, the IMPs'  software  gets  into  a
  152.  
  153. "funny"  state.   The IMPs which were restarted worked well until
  154.  
  155. they were connected to the rest of  the  net,  after  which  they
  156.  
  157. exhibited  the same complex of symptoms as the IMPs which had not
  158.  
  159. been restarted.
  160.  
  161.  
  162.      From the facts so far presented, we  were  able  to  draw  a
  163.  
  164. number  of  conclusions.   Any  problem  which  affects  all IMPs
  165.  
  166. throughout the network is usually a routing problem.   Restarting
  167.  
  168. an  IMP  re-initializes  the routing data structures, so the fact
  169.  
  170. that restarting an IMP did not alleviate the problem in that  IMP
  171.  
  172. suggested  that  the problem was due to one or more "bad" routing
  173.  
  174. updates circulating in the network.  IMPs  which  were  restarted
  175.  
  176. would  just receive the bad updates from those of their neighbors
  177.  
  178. which were not restarted.  The fact that IMPs  seemed  unable  to
  179.  
  180. keep  their lines up was also a significant clue as to the nature
  181.  
  182. of the problem.  Each  pair  of  neighboring  IMPs  runs  a  line
  183.  
  184. up/down protocol to determine whether the line connecting them is
  185.  
  186. of  sufficient  quality  to be put into operation.  This protocol
  187.  
  188. involves the sending of HELLO and I-HEARD-YOU messages.  We  have
  189.  
  190. noted  in  the  past that under conditions of extremely heavy CPU
  191.  
  192. utilization, so many buffers can pile up waiting to be served  by
  193.  
  194. the  bottleneck  CPU process, that the IMPs are unable to acquire
  195.  
  196. the  buffers  needed  for  receiving  the  HELLO  or  I-HEARD-YOU
  197.  
  198. messages.  If a condition like this lasts for any length of time,
  199.  
  200.  
  201.                               - 3 -
  202.  
  203.  
  204. RFC 789                              Bolt Beranek and Newman Inc.
  205.                                                     Eric C. Rosen
  206.  
  207. the  IMPs  may  not be able to run the line up/down protocol, and
  208.  
  209. lines will be declared down by the IMPs' software.  On the  basis
  210.  
  211. of  all  these  facts,  our  tentative  conclusion  was that some
  212.  
  213. malformed update was causing the routing process in the  IMPs  to
  214.  
  215. use  an excessive amount of CPU time, possibly even to be running
  216.  
  217. in an infinite loop.  (This would be  quite  a  surprise  though,
  218.  
  219. since  we  tried very hard to protect ourselves against malformed
  220.  
  221. updates when we designed the routing process.)  As we shall  see,
  222.  
  223. this  tentative  conclusion, although on the right track, was not
  224.  
  225. quite correct, and the actual situation turned  out  to  be  much
  226.  
  227. more complex.
  228.  
  229.  
  230.      When we examined core dumps from several IMPs, we noted that
  231.  
  232. most,  in  some cases all, of the IMPs' buffers contained routing
  233.  
  234. updates  waiting  to  be  processed.   Before   describing   this
  235.  
  236. situation further, it is necessary to explain some of the details
  237.  
  238. of  the  routing  algorithm's  updating  scheme.   (The following
  239.  
  240. explanation will of course be very brief and incomplete.  Readers
  241.  
  242. with a greater  level  of  interest  are  urged  to  consult  the
  243.  
  244. references.)  Every so often, each IMP generates a routing update
  245.  
  246. indicating  which  other  IMPs  are  its immediate neighbors over
  247.  
  248. operational  lines,  and  the  average   per-packet   delay   (in
  249.  
  250. milliseconds)  over that line.  Every IMP is required to generate
  251.  
  252. such an update at least once per minute, and no IMP is  permitted
  253.  
  254. to  generate  more than a dozen such updates over the course of a
  255.  
  256. minute.  Each  update  has  a  6-bit  sequence  number  which  is
  257.  
  258.  
  259.                               - 4 -
  260.  
  261.  
  262. RFC 789                              Bolt Beranek and Newman Inc.
  263.                                                     Eric C. Rosen
  264.  
  265. advanced by 1 (modulo 64) for each successive update generated by
  266.  
  267. a  particular IMP.  If two updates generated by the same IMP have
  268.  
  269. sequence numbers n and m, update n  is  considered  to  be  LATER
  270.  
  271. (i.e.,  more recently generated) than update m if and only if one
  272.  
  273. of the following two conditions hold:
  274.  
  275.  
  276.  
  277.          (a) n > m, and n - m <= 32
  278.  
  279.          (b) n < m, and m - n > 32
  280.  
  281.  
  282. (where the comparisons and subtractions treat n and m as unsigned
  283.  
  284. 6-bit numbers, with  no  modulus).   When  an  IMP  generates  an
  285.  
  286. update,  it sends a copy of the update to each neighbor.  When an
  287.  
  288. IMP A receives an update u1 which was generated  by  a  different
  289.  
  290. IMP  B,  it  first  compares  the  sequence number of u1 with the
  291.  
  292. sequence number of the last update, u2, that it accepted from  B.
  293.  
  294. If  this  comparison  indicates  that  u2 is LATER than u1, u1 is
  295.  
  296. simply discarded.  If, on the other hand, u1 appears  to  be  the
  297.  
  298. LATER  update, IMP A will send u1 to all its neighbors (including
  299.  
  300. the one from which it was received).  The sequence number  of  u1
  301.  
  302. will be retained in A's tables as the LATEST received update from
  303.  
  304. B.   Of  course,  u1 is always accepted if A has seen no previous
  305.  
  306. update from B.  Note that this procedure is  designed  to  ensure
  307.  
  308. that  an  update  generated  by  a  particular  IMP  is received,
  309.  
  310. unchanged, by all other  IMPs  in  the  network,  IN  THE  PROPER
  311.  
  312. SEQUENCE.    Each routing update is broadcast (or flooded) to all
  313.  
  314. IMPs, not just to immediate neighbors of the IMP which  generated
  315.  
  316.  
  317.                               - 5 -
  318.  
  319.  
  320. RFC 789                              Bolt Beranek and Newman Inc.
  321.                                                     Eric C. Rosen
  322.  
  323. the update (as in some other routing algorithms).  The purpose of
  324.  
  325. the  sequence numbers is to ensure that all IMPs will agree as to
  326.  
  327. which update from a given IMP  is  the  most  recently  generated
  328.  
  329. update from that IMP.
  330.  
  331.  
  332.      For  reliability,  there  is  a  protocol for retransmitting
  333.  
  334. updates over individual links.  Let X and Y be neighboring  IMPs,
  335.  
  336. and let A be a third IMP.  Suppose X receives an update which was
  337.  
  338. generated by A, and transmits it to Y.  Now if in the next 100 ms
  339.  
  340. or  so, X does not receive from Y an update which originated at A
  341.  
  342. and whose sequence number is at least as recent as  that  of  the
  343.  
  344. update  X  sent  to  Y,  X concludes that its transmission of the
  345.  
  346. update did not get through to Y, and  that  a  retransmission  is
  347.  
  348. required.   (This  conclusion is warranted, since an update which
  349.  
  350. is  received  and  adjudged  to  be  the  most  recent  from  its
  351.  
  352. originating  IMP is sent to all neighbors, including the one from
  353.  
  354. which it was received.)  The IMPs do not keep the original update
  355.  
  356. packets  buffered  pending  retransmission.   Rather,   all   the
  357.  
  358. information  in  the  update  packet  is  kept in tables, and the
  359.  
  360. packet  is  re-created  from  the  tables  if  necessary  for   a
  361.  
  362. retransmission.
  363.  
  364.  
  365.      This  transmission  protocol  ("flooding")  distributes  the
  366.  
  367. routing updates  in a  very  rapid  and  reliable  manner.   Once
  368.  
  369. generated by an IMP, an update will almost always reach all other
  370.  
  371. IMPs  in  a time period on the order of 100 ms.  Since an IMP can
  372.  
  373. generate no more than a dozen updates per minute, and  there  are
  374.  
  375.                               - 6 -
  376.  
  377.  
  378. RFC 789                              Bolt Beranek and Newman Inc.
  379.                                                     Eric C. Rosen
  380.  
  381. 64  possible sequence numbers, sequence number wrap-around is not
  382.  
  383. a problem.  There is only one exception  to  this.   Suppose  two
  384.  
  385. IMPs  A  and  B  are  out  of  communication for a period of time
  386.  
  387. because there is no physical path between them.  (This may be due
  388.  
  389. either to a network partition, or to a more  mundane  occurrence,
  390.  
  391. such  as  one  of  the  IMPs  being down.)  When communication is
  392.  
  393. re-established, A and B have no way of knowing how long they have
  394.  
  395. been out of communication, or how many times the other's sequence
  396.  
  397. numbers may have wrapped around.  Comparing the  sequence  number
  398.  
  399. of  a newly received update with the sequence number of an update
  400.  
  401. received before the outage may give an incorrect result.  To deal
  402.  
  403. with this problem, the following scheme is adopted.   Let  t0  be
  404.  
  405. the time at which IMP A receives update number n generated by IMP
  406.  
  407. B.   Let  t1 be t0 plus 1 minute.  If by t1, A receives no update
  408.  
  409. generated by B with a LATER sequence number than n, A will accept
  410.  
  411. any update from B as being more recent than n.  So  if  two  IMPs
  412.  
  413. are  out  of  communication  for  a  period of time which is long
  414.  
  415. enough for the sequence numbers  to  have  wrapped  around,  this
  416.  
  417. procedure  ensures  that  proper  resynchronization  of  sequence
  418.  
  419. numbers is effected when communication is re-established.
  420.  
  421.  
  422.      There is just one more facet of the updating  process  which
  423.  
  424. needs  to  be  discussed.   Because  of  the way the line up/down
  425.  
  426. protocol works, a line cannot be  brought  up  until  60  seconds
  427.  
  428. after  its performance becomes good enough to warrant operational
  429.  
  430. use.  (Roughly speaking, this is the time it takes  to  determine
  431.  
  432.  
  433.                               - 7 -
  434.  
  435.  
  436. RFC 789                              Bolt Beranek and Newman Inc.
  437.                                                     Eric C. Rosen
  438.  
  439. that  the  line's  performance  is  good  enough.)   During  this
  440.  
  441. 60-second period, no data is sent  over  the  line,  but  routing
  442.  
  443. updates are transmitted.  Remember that every node is required to
  444.  
  445. generate  a  routing update at least once per minute.  Therefore,
  446.  
  447. this procedure ensures that if two IMPs are out of  communication
  448.  
  449. because  of  the  failure  of some line, each has the most recent
  450.  
  451. update  from   the   other   by   the   time   communication   is
  452.  
  453. re-established.
  454.  
  455.  
  456.      This  very  short  introduction  to  the routing algorithm's
  457.  
  458. updating protocol should provide enough background to enable  the
  459.  
  460. reader  to  understand  the  particular problem under discussion;
  461.  
  462. further justification and detail can be found in the  references.
  463.  
  464.  
  465.      Let  us  return now to the discussion of the network outage.
  466.  
  467. I have already mentioned that the core dumps  showed  almost  all
  468.  
  469. buffers   holding  routing  updates  which  were  waiting  to  be
  470.  
  471. processed.  Close inspection showed that  all  the  updates  were
  472.  
  473. from  a  single  IMP, IMP 50.  By a strange "coincidence," IMP 50
  474.  
  475. had been  malfunctioning  just  before  the  network-wide  outage
  476.  
  477. occurred,  and  was  off the net during the period of the outage.
  478.  
  479. Hence it was not generating any updates during the period of  the
  480.  
  481. outage.   In  addition,  IMP 29, an immediate neighbor of IMP 50,
  482.  
  483. was also suffering hardware malfunctions (in particular, dropping
  484.  
  485. bits), but was up (though somewhat flakey) while the network  was
  486.  
  487. in  bad  shape.  Furthermore, the malfunction in IMP 50 had to do
  488.  
  489. with its ability to communicate properly with the neighboring IMP
  490.  
  491.                               - 8 -
  492.  
  493.  
  494. RFC 789                              Bolt Beranek and Newman Inc.
  495.                                                     Eric C. Rosen
  496.  
  497. 29.  Although we did not yet understand how it was  possible  for
  498.  
  499. so  many updates from one IMP to be extant simultaneously, we did
  500.  
  501. understand enough to be able to get the network to recover.   All
  502.  
  503. that was necessary was to patch the IMPs to disregard any updates
  504.  
  505. from  IMP  50, which after all was down anyway.  When the network
  506.  
  507. is operating normally, broadcasting a patch to all  IMPs  can  be
  508.  
  509. done  in  a  matter of minutes.  With the network operating as it
  510.  
  511. was during the period of the outage, this can take as much  as  3
  512.  
  513. or  4 hours.  (Remember that the IMPs are generally unmanned, and
  514.  
  515. that the only way of controlling them from the  NCC  is  via  the
  516.  
  517. network  itself.   This  is perfectly satisfactory when an outage
  518.  
  519. affects only a small group of IMPs, but  is  an  obvious  problem
  520.  
  521. when  the  outage  has network-wide effects.)  This procedure was
  522.  
  523. fully successful in bringing the network back up.
  524.  
  525.  
  526.      When we looked closely at the dumps, we saw  that  not  only
  527.  
  528. were  all  the updates on the queue from IMP 50, but they all had
  529.  
  530. one of three sequence numbers (either 8, 40,  or  44),  and  were
  531.  
  532. ordered        in        the        queue       as       follows:
  533.  
  534. 8, 40, 44, 8, 40, 44, 8, 40, 44, ...  Note that by the definition
  535.  
  536. of LATER, 44 is LATER than 40 (44 > 40 and 44 - 40 <= 32), 40  is
  537.  
  538. LATER  than  8  (40 > 8 and 40 - 8 <= 32), and 8 is LATER than 44
  539.  
  540. (8 < 44 and 44 - 8 > 32).  Given the presence  of  three  updates
  541.  
  542. from the same IMP with these three sequence numbers, this is what
  543.  
  544. would  be  expected.   Since each update is LATER than one of the
  545.  
  546. others, a cycle is formed which keeps the three updates  floating
  547.  
  548.  
  549.                               - 9 -
  550.  
  551.  
  552. RFC 789                              Bolt Beranek and Newman Inc.
  553.                                                     Eric C. Rosen
  554.  
  555. around  the  network  indefinitely.   Thus the IMPs spend most of
  556.  
  557. their CPU time and buffer space in processing these updates.  The
  558.  
  559. problem was to figure out how these three updates could  possibly
  560.  
  561. have  existed at the same time.  After all, getting from update 8
  562.  
  563. to update 40  should  require  2  or  3  full  minutes,  plus  31
  564.  
  565. intervening  sequence  numbers.   So  how could 8 still be around
  566.  
  567. when  40  was  generated,  especially  since  no   updates   with
  568.  
  569. intervening sequence numbers were present?
  570.  
  571.  
  572.      Our  first thought was that maybe the real-time clock in IMP
  573.  
  574. 50 was running one or two orders of magnitude faster than normal,
  575.  
  576. invalidating our assumptions about the maximum number of  updates
  577.  
  578. which  could  be  generated  in  a  given  time.   An alternative
  579.  
  580. hypothesis suggested itself however when we looked at the  binary
  581.  
  582. representations of the three sequence numbers:
  583.  
  584.  
  585.           8 - 001000
  586.  
  587.          40 - 101000
  588.  
  589.          44 - 101100
  590.  
  591.  
  592. Note  that  44  has only one more bit than 40, which has only one
  593.  
  594. more bit than 8.  Furthermore, the three different  updates  were
  595.  
  596. completely  identical,  except  for their sequence numbers.  This
  597.  
  598. suggests that  there  was  really  only  one  update,  44,  whose
  599.  
  600. sequence number was twice corrupted by dropped bits.  (Of course,
  601.  
  602. it's  also  possible  that  the  "real"  update  was  8,  and was
  603.  
  604. corrupted by added bits.  However, bit-dropping has proven itself
  605.  
  606.  
  607.                              - 10 -
  608.  
  609.  
  610. RFC 789                              Bolt Beranek and Newman Inc.
  611.                                                     Eric C. Rosen
  612.  
  613. to be a much  more  common  sort  of  hardware  malfunction  than
  614.  
  615. bit-adding,  although  spontaneously  dropped  bits may sometimes
  616.  
  617. come back on spontaneously.)
  618.  
  619.  
  620.      Surely, the reader will object,  there  must  be  protection
  621.  
  622. against  dropped  bits.   Yes there is protection, but apparently
  623.  
  624. not enough.  The update packets themselves are checksummed, so  a
  625.  
  626. dropped  bit  in  an update packet is readily detected.  Remember
  627.  
  628. though that if  an  update  needs  to  be  retransmitted,  it  is
  629.  
  630. recreated  from tabled information.  For maximal reliability, the
  631.  
  632. tables must  be  checksummed  also,  and  the  checksum  must  be
  633.  
  634. recomputed every time the table is accessed.  However, this would
  635.  
  636. require  either  a  large  number  of  CPU  cycles  (for frequent
  637.  
  638. checksumming of a large area of memory)  or  a  large  amount  of
  639.  
  640. memory  (to store the checksums for a lot of small areas).  Since
  641.  
  642. CPU cycles and memory are both potentially scarce resources, this
  643.  
  644. did not seem to us to  be  a  cost-effective  way  to  deal  with
  645.  
  646. problems  that  arise, say, once per year (this is the first such
  647.  
  648. problem encountered in a year and a half of running this  routing
  649.  
  650. algorithm).   Time  and  space  can  be  saved by recomputing the
  651.  
  652. checksum at  a  somewhat  slower  frequency,  but  this  is  less
  653.  
  654. reliable,  in  that it allows a certain number of dropped bits to
  655.  
  656. "fall between the cracks."  It seems likely then that one of  the
  657.  
  658. malfunctioning  IMPs  had to retransmit update 44 at least twice,
  659.  
  660. (recreating it each time from tabled information), retransmitting
  661.  
  662. it at least once with the corrupted sequence number  40,  and  at
  663.  
  664.  
  665.                              - 11 -
  666.  
  667.  
  668. RFC 789                              Bolt Beranek and Newman Inc.
  669.                                                     Eric C. Rosen
  670.  
  671. least  once  with  the  corrupted  sequence number 8.  This would
  672.  
  673. cause those three sequence numbers to be extant  in  the  network
  674.  
  675. simultaneously,  even  though protocol is supposed to ensure that
  676.  
  677. this is impossible.
  678.  
  679.  
  680.      Actually, the detection of dropped bits is most  properly  a
  681.  
  682. hardware function.  The next generation of IMP hardware (the "C30
  683.  
  684. IMP")  will  be able to detect and correct all single-bit errors,
  685.  
  686. and will detect all other bit errors.  Uncorrectable  bit  errors
  687.  
  688. will  cause  the  IMP to go into its "loader/dumper."  (An IMP in
  689.  
  690. its loader/dumper is not usable for  transferring  data,  and  is
  691.  
  692. officially   in  the  "down"  state.   However,  an  IMP  in  its
  693.  
  694. loader/dumper is easily controllable from the  NCC,  and  can  be
  695.  
  696. restarted  or  reloaded  without  on-site intervention.)  Current
  697.  
  698. hardware does have parity checking (which  should  detect  single
  699.  
  700. dropped  bits),  but  this feature has had to be turned off since
  701.  
  702. (a) there are too many spurious parity "errors,"  i.e.,  most  of
  703.  
  704. the  time when the machines complain of parity errors there don't
  705.  
  706. really seem to be any, and (b) parity errors cause  the  machines
  707.  
  708. to  simply  halt, rather than go into their loader/dumpers, which
  709.  
  710. means that on-site intervention is required to restart them.
  711.  
  712.  
  713.      Pending the introduction of improved hardware, what  can  be
  714.  
  715. done  to prevent problems like this from recurring in the future?
  716.  
  717. It is easy to think of many  ways  of  avoiding  this  particular
  718.  
  719. problem,  especially  if  one does not consider the problems that
  720.  
  721. may arise from the "fixes."  For example, we  might  be  able  to
  722.  
  723.                              - 12 -
  724.  
  725.  
  726. RFC 789                              Bolt Beranek and Newman Inc.
  727.                                                     Eric C. Rosen
  728.  
  729. avoid  this  sort of problem by spending a lot more CPU cycles on
  730.  
  731. checksumming, but this may be too expensive because of  the  side
  732.  
  733. effects  it  would  introduce.   (Also,  it is not clear that any
  734.  
  735. memory checksumming strategy can be totally free of "cracks.")  A
  736.  
  737. very  simple  and  conservative  fix  to  prevent this particular
  738.  
  739. problem from recurring is to modify clause (a) of the  definition
  740.  
  741. of  LATER  so  that  the  "<="  is replaced by "<" (strictly less
  742.  
  743. than).  We will implement this fix, but it cannot  be  guaranteed
  744.  
  745. that no related problems will ever arise.
  746.  
  747.  
  748.      What  is  really  needed  is  not some particular fix to the
  749.  
  750. routing algorithm, but a more general fix.  In  some  sense,  the
  751.  
  752. problem  we  saw  was  not really a routing problem.  The routing
  753.  
  754. code was working correctly, and the routes  that  were  generated
  755.  
  756. were correct and consistent.  The real problem is that a freakish
  757.  
  758. hardware  malfunction caused a high priority process to run wild,
  759.  
  760. devouring resources needed by other processes, thereby making the
  761.  
  762. network unusable.  The fact that the wild process was the routing
  763.  
  764. process is incidental.  In  designing  the  routing  process,  we
  765.  
  766. carefully  considered the amount of resource utilization it would
  767.  
  768. require.  By strictly controlling and limiting the rate at  which
  769.  
  770. updates  can  be  generated, we tried to prevent any situation in
  771.  
  772. which the routing process would make  excessive  demands  on  the
  773.  
  774. system.   As  we  have  seen  though, even our carefully designed
  775.  
  776. mechanisms were unable to protect against every possible sort  of
  777.  
  778. hardware  failure.  We need a better means of detecting that some
  779.  
  780.  
  781.                              - 13 -
  782.  
  783.  
  784. RFC 789                              Bolt Beranek and Newman Inc.
  785.                                                     Eric C. Rosen
  786.  
  787. high priority process in the IMP, despite all the  safeguards  we
  788.  
  789. have  built in, is still consuming too many resources.  Once this
  790.  
  791. is  detected,  the  IMP  can  be  automatically  placed  in   its
  792.  
  793. loader/dumper.  In the case under discussion, we would have liked
  794.  
  795. to  have  all  the  IMPs  go  into  their loader/dumpers when the
  796.  
  797. problem arose.  This would have enabled us to  re-initialize  and
  798.  
  799. restart  all  the  IMPs  much more quickly.  (Although restarting
  800.  
  801. individual  IMPs  did  little  good,  restarting  all  the   IMPs
  802.  
  803. simultaneously would have cleared up the problem instantly, since
  804.  
  805. all  routing  tables  in  all  IMPs  would  have been initialized
  806.  
  807. simultaneously.)  It took us no more than an hour to  figure  out
  808.  
  809. how  to  restore  the  network;  several  additional  hours  were
  810.  
  811. required because it took so long for us to gain  control  of  the
  812.  
  813. misbehaving  IMPs  and  get  them  back  to  normal.   A built-in
  814.  
  815. software alarm system (assuming,  of  course,  that  it  was  not
  816.  
  817. subject  to  false  alarms)  might have enabled us to restore the
  818.  
  819. network more quickly, significantly reducing the duration of  the
  820.  
  821. outage.   This  is  not  to  say  that a better alarm and control
  822.  
  823. system could ever be a replacement for careful study  and  design
  824.  
  825. which   attempts   to  properly  distribute  the  utilization  of
  826.  
  827. important resources, but only that it is a necessary adjunct,  to
  828.  
  829. handle  the cases that will inevitably fall between the cracks of
  830.  
  831. even the most careful design.
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.                              - 14 -
  840.  
  841.  
  842. RFC 789                              Bolt Beranek and Newman Inc.
  843.                                                     Eric C. Rosen
  844.  
  845.                            REFERENCES
  846.  
  847.  
  848.  
  849. "The New Routing Algorithm for the ARPANET," IEEE TRANSACTIONS ON
  850.  
  851. COMMUNICATIONS, May 1980, J.M. McQuillan, I. Richer, E.C.  Rosen.
  852.  
  853.  
  854. "The  Updating  Protocol  of  ARPANET's  New  Routing Algorithm,"
  855.  
  856. COMPUTER NETWORKS, February 1980, E.C. Rosen.
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.                              - 15 -
  898.  
  899.  
  900.